<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // then
  // catch

  // const p1 = ajax("异步1");

  // 在链式调用中，如果有一个promise实例失败了，后面的then都不会执行，会去查找第一次遇到的catch，执行catch的处理

  // p1.then(res=>{
  //   console.log(res, 1)
  // }).then(res=>{
  //   console.log(res, 2)
  // }).then(res=>{
  //   console.log(res, 3)
  // }).then(res=>{
  //   console.log(res, 4)
  // }).catch(code=>{
  //   console.log(code, 5)
  // }).catch(code=>{
  //   console.log(code, 6)
  // }).catch(code=>{
  //   console.log(code, 7)
  // }).catch(code=>{
  //   console.log(code, 8)
  // })



  // =========


  // const p1 = ajax("异步1");
  // const p2 = ajax("异步2");
  // const p3 = ajax("异步3");

  // 1失败：4
  // 1成功，2失败：1，4
  // 1成功，2成功，3成功：1，2，3
  // 1成功，2成功，3失败：1，2，4

  // p1.then(res=>{
  //   console.log(res, 1);
  //   return p2;
  // }).then(res=>{
  //   console.log(res, 2);
  //   return p3;
  // }).then(res=>{
  //   console.log(res, 3);
  // }).catch(code=>{
  //   console.log(code, 4);
  // }).catch(code=>{
  //   console.log(code, 5);
  // })


  // ==============

  // const p1 = ajax("异步1");
  // p1.finally(()=>{
  //   console.log( p1 );
  // })


  // ================

  // const p1 = ajax("异步1");
  // p1.then(res=>{
  //   console.log(res)
  // }, code=>{
  //   console.log(code)
  // });
  

  
  function ajax(url){
    return new Promise(( resolve, reject )=>{
      setTimeout(() => {
        resolve(url + " 成功了");
      }, Math.random() * 300);

      setTimeout(() => {
        reject(url + " 失败了");
      }, Math.random() * 500);
    })
  }
  
</script>
</html>